package com.example.demo;

/**
 * @author leiliang
 * @version 1.0
 * @Description java的值传递和引用传递
 * @date 2021/6/4 9:56
 */

/**
 * 自己总结:值传递不改变 例如  String a = "hello";  int b =5;
 * 引用传递分情况会改变数据   例如 User user = new User();
 *
 */
public class javaTest {


    public static void main(String[] args) {
        //String 引用数据类型，调用 pass 方法后 b 的值没有改变
        String a = "hello";
        //int 基本数据类型，调用 pass 方法后 a 的值没有改变,还是 1
        int b = 1;

        //new Class 引用类型，调用 pass 方法后 name 与 age 的值改变了
        User user = new User();
        // 调用 pass 后，name 为 pass 了
        user.setName("main");
        //调用 pass 后，age 为 4 了
        user.setAge(2);
        //pass 方法调用
        //调用方法1
        pass(user, a, b);
        //调用方法2
        //pass2(user, a, b);

        System.out.println("main 方法 user 是：" + user.toString());
        System.out.println("main 方法 a 的值是：" + a + " --- b 的值是：" + b);
        //调用方法1结果
       /* pass 方法 user 是：name = pass --- age = 4
        pass 方法 a 的值是：你好 --- b 的值是：3
        main 方法 user 是：name = pass --- age = 4
        main 方法 a 的值是：hello --- b 的值是：1*/

        //调用方法2结果
       /* pass 方法 user 是：name = pass --- age = 4
        pass 方法 a 的值是：你好 --- b 的值是：3
        main 方法 user 是：name = main --- age = 2
        main 方法 a 的值是：hello --- b 的值是：1*/
    }


    public static void pass(User user, String a, int b) {
        a = "你好";
        b = 3;
        //user = new User();
        user.setName("pass");
        user.setAge(4);
        System.out.println("pass 方法 user 是：" + user.toString());
        System.out.println("pass 方法 a 的值是：" + a + " --- b 的值是：" + b);
    }


    public static void pass2(User user, String a, int b) {
        a = "你好";
        b = 3;
        user = new User();
        user.setName("pass");
        user.setAge(4);
        System.out.println("pass 方法 user 是：" + user.toString());
        System.out.println("pass 方法 a 的值是：" + a + " --- b 的值是：" + b);
    }
}

class User {
    int  id;
    String name;

    int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "name = " + name + " --- age = " + age;
    }

}
